9-5 lIk

我們可以使用 interpn 指令來進行高維格子點內插,其使用語法如下:

vi = interpn(x1, x2,.., v, y1, y2,.., method)

其中 x1、x2、… 是資料點的輸入部份,v 是資料點的輸出部份,y1、y2、… 是內插點,而字串 method 則可指定內插方法,有下列 4 種:

使用 interpn 時,x1、x2、… 必須是嚴格遞增或遞減。為了保證格式正確,x1、x2、… 最好是由 ndgrid 指令產生,以保持其格式正確性。

二維格子點可由 meshgrid 指令產生,而高維格子點則可由 ndgrid 指令所產生,其使用語法如下:

[X1, X2, X3,…] = ndgrid(x1, x2, x3,…)

其中 XI 的第 i 維元素是由 xi 反覆產生。舉例來說,我們可計算下列方程式

$$ z = x_2 e^{-x_1^2-x_2^2-x_3^2} $$

在格子點的值,並以顏色代表值的大小,然後再用更密的資料點來進行內插,得到更細緻的圖,如下:

Example 1: 09-內插法/interpn01.mx1 = -2:0.4:2; x2 = -2:0.5:2; x3 = -2:0.3:2; [x1, x2, x3] = ndgrid(x1, x2, x3); z = x2.*exp(-x1.^2-x2.^2-x3.^2); subplot(2,1,1); slice(x2, x1, x3, z, [-1, 1], [], [0]); shading interp % 刪除格線,並改用平滑的顏色 view(-20, 15); colorbar; % 顯示顏色與函數值的對照表 y1 = -2:0.1:2; y2 = -2:0.1:2; y3 = -2:0.1:2; [y1, y2, y3] = ndgrid(y1, y2, y3); zz = interpn(x1, x2, x3, z, y1, y2, y3); subplot(2,1,2); slice(y2, y1, y3, zz, [-1, 1], [], [0]); shading interp % 刪除格線,並改用平滑的顏色 view(-20, 15); colorbar; % 顯示顏色與函數值的對照表

在上述範例中,上方的圖比較粗糙,下方的圖則比較細密,顯示 interpn 指令的內插效果。另外,在上述範例中,我們使用 interpn 指令來對 3 個輸入的資料點進行內插,此功能是和 interp3 相同的,但事實上, interpn 指令是可以對更高維度的資料點進行內插,所以在功能更為強大。


MATLAB程式設計:進階篇